
%include "init"

BITS 16                 ; 16位实模式
ORG LOADER_BASE_ADDR              ; MBR 跳转到 loader 的地址

start:
; -----------------------------------
    ; 初始化段寄存器与栈
    ; -----------------------------------
    xor ax, ax          ; AX = 0
    mov ds, ax          ; DS = 0 (数据段)
    mov es, ax          ; ES = 0 (附加段)
    mov ss, ax          ; SS = 0 (栈段)
    mov sp, LOADER_BASE_ADDR      ; SP = 0x900 (栈顶)

    ; -----------------------------------
    ; 设置显存段（0xB800）
    ; -----------------------------------
    mov ax, 0xB800      ; 文本模式显存段
    mov es, ax          ; ES = 0xB800

    ; -----------------------------------
    ; 打印彩色字符串
    ; -----------------------------------
    mov si, msg         ; SI = 字符串地址
    mov di, (80 * 2) * 0  ; 屏幕第10行起始位置 (行*每行160字节)
    mov ah, 0x1E        ; 属性：蓝底黄字 (前4位背景，后4位前景)
    call print_string

    jmp $               ; 无限循环

    ; ================ 显存打印函数 ================
    ; 输入：SI=字符串地址, DI=显存偏移, AH=字符属性
    print_string:
        pusha
    .print_loop:
        lodsb               ; 加载字符 [SI] -> AL, SI++
        or al, al           ; 检测结束符 0
        jz .done
        stosw               ; 写入显存: [ES:DI] = AX (AL=字符, AH=属性), DI+2
        jmp .print_loop
    .done:
        popa
        ret

    ; ================ 数据区 ================
    msg db "2 loader", 0   ; 以0结尾的字符串


